import os
from pathlib import Path

from flask import Flask
from app.config import config_map  # 导入数据库配置
from app.models import db  # 导入models里的全局db
from app.commands import register_commands  # 导入flask自定义数据库命令行操作
from app.routes import main_bp  # 导入 路径 蓝图


def create_app(config_name: str = "dev") -> Flask:
    """
    应用工厂函数：创建并配置Flask应用
    :param config_name: 环境名称（dev/prod）
    :return: 配置好的Flask应用实例
    """
    # 转换为绝对路径（避免相对路径歧义，推荐）
    # Path.cwd() → 项目根目录（my-flask/），因为 Flask 启动时默认在根目录
    template_dir = str(Path.cwd() / "templates")
    print(template_dir)

    # 1.Flask应用初始化，创建应用实例
    app = Flask(__name__, template_folder=template_dir)

    # 2.加载配置（从config.py中读取对应环境的配置）
    app.config.from_object(config_map['dev'])

    # 3. 数据库模型定义：映射数据库表结构（ORM核心）
    db.init_app(app)

    # 4. 命令行指令：用于数据库初始化、测试数据生成（通过flask cli调用）
    register_commands(app)

    # 5.注册蓝图（路由模块）
    app.register_blueprint(main_bp)  # 通用路由（主页、仪表盘、错误页）

    return app
